package com.tulele.vtool.service;

import com.github.pagehelper.PageInfo;
import com.tulele.vtool.model.*;

import com.tulele.vtool.model.combinedEntity.*;
import com.tulele.vtool.model.reqEntity.GetArticleInfoByArticleReqBean;
import com.tulele.vtool.model.respEntity.ArticleRespEntity;

import java.util.List;

public interface IArticleInfoService {

    /**
     * 添加微信公众号文章
     * @param articleInfo
     * @return
     */
    int addWechatArticleInfo(ArticleInfo articleInfo);

    /**
     * 修改微信公众号文章
     * @param articleInfo
     * @return
     */
    int modifyWechatArticleInfo(ArticleInfo articleInfo);

    /**
     * 添加用户文章
     * @param articleInfo
     * @return
     */
    int addUserArticleInfo(ArticleInfo articleInfo);

    /**
     * 修改用户文章
     * @param articleInfo
     * @return
     */
    int modifyUserArticleInfo(ArticleInfo articleInfo);

    /**
     * 获取文章详情
     * @param articleId
     * @return
     */
    ArticleInfo getArticleDetailByInfo(Integer articleId);

    /**
     * 获取文章详情
     * @param articleId
     * @return
     */
    ArticleInfo getArticleDetailInfo(Integer articleId);

    /**
     * 查询用户查看他人文章信息
     * @param lookArticleInfo
     * @return
     */
    PageInfo<CombinedUserLookOtherArticleInfo> getUserLookOtherArticleInfo(Integer pageNum, Integer pageSize, LookArticleInfo lookArticleInfo);

    /**
     * 根据品牌查询文章信息
     * @param userId
     * @return
     */
    PageInfo<CombinedArticleInfoByArticleBrand> getArticleInfoByBrand(Integer pageNum, Integer pageSize, Integer userId);

    /**
     * 根据文章类型查询文章信息
     * @param pageNum
     * @param pageSize
     * @param articleTypeId
     * @return
     */
    PageInfo<CombinedArticleInfoByArticleType> getArticleInfoByArticleType(Integer pageNum, Integer pageSize, Integer articleTypeId);

    /**
     * 查询指定数目的用户文章
     * @param userId
     * @return
     */
    List<CombinedUserArticleInfoBySpecialSize> getUserArticleInfoBySpecialSize(Integer userId, int recordSize);

    /**
     * 查询用户文章
     * @param userId
     * @return
     */
    PageInfo<CombinedUserOwnArticleInfo> getUserOwnArticleInfo(Integer pageNum, Integer pageSize, Integer userId);

    /**
     * 移除用户文章
     * @param articleInfo
     * @return
     */
    int removeUserArticleInfo(ArticleInfo articleInfo);

    /**
     * 查询文章用户信息
     * @param articleId
     * @return
     */
    Integer getArticleUserInfo(Integer articleId);

    /**
     * 查看他人文章
     * @param lookArticleInfo
     * @return
     */
    Integer lookOtherUserArticle(LookArticleInfo lookArticleInfo, ArticleInfo articleInfo, String lookUserNickName, String viewType,String springProfilesActive) throws Exception;

    Integer lookOtherUserArticleSyn(LookArticleInfo lookArticleInfo, ArticleInfo articleInfo, String lookUserNickName, String viewType,String springProfilesActive) throws Exception;
    /**
     * 获取平台推荐文章信息
     * @return
     */
    List<PlatformRecommendArticleInfo> getPlatformRecommendArticleInfo();

    /**
     * 查询第三方爬取文章信息
     * @param articleInfo
     * @return
     */
    ArticleInfo getSpiderArticleInfoByThirdArticleId(ArticleInfo articleInfo);

    /**
     * 查询用户平台文章分享状态
     * @param articleInfo
     * @return
     */
    Integer getUserPlatformArticleShareStatus(ArticleInfo articleInfo);

    /**
     * 查询平台品牌文章数据
     * @param brandId
     * @return
     */
    Integer getPlatformArticleCountByBrandId(Integer brandId);

    /**
     * 查询平台类型文章数据
     * @param typeId
     * @return
     */
    Integer getPlatformArticleCountByTypeId(Integer typeId);

    /**
     * 获取待处理的爬虫文章
     * @return
     */
    List<ArticleInfo> getToBeProcessedSpiderArticleInfo();

    /**
     * 根据品牌查询平台给用户推荐文章
     * @return
     */
    List<PlatformRecommendArticleInfo> getPlatformRecommendArticleInfoByBrand(List<Integer> useBrandIds);

    /**
     * 根据类型查询平台给用户推荐文章
     * @return
     */
    List<PlatformRecommendArticleInfo> getPlatformRecommendArticleInfoByType(Integer articleTypeId);

    /**
     * 根据类型查询多条平台给用户推荐文章
     * @param articleTypeId 文章类型 ID
     * @param recordSize 数量
     * @return
     */
    List<PlatformRecommendArticleInfo> getPlatformRecommendArticleInfoByTypeAndRecordSize(Integer articleTypeId, Integer recordSize);

    /**
     * 根据品牌随机查询文章信息
     * @param articleTypeId
     * @param recordSize
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getArticleInfoByBrandForRand(Integer articleTypeId, int recordSize);

    /**
     * 根据文章类型随机查询文章信息
     * @param articleTypeId
     * @param recordSize
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getArticleInfoByArticleTypeForRand(Integer articleTypeId, int recordSize);

    /**
     * 删除文章信息
     * @param articleId
     * @return
     */
    int pseudoDeleteArticleInfo(Integer articleId);

    /**ljt 20201027 start*/
    /**
     * 根据用户关注的文章类型id倒序查询文章信息
     *
     * @param pageNum 查询起始位置
     * @param pageSize  查询条数
     * @param integerList 实例对象
     * @return 对象列表
     */
    PageInfo selectAllByLimit(Integer pageNum , Integer pageSize, List<Integer> integerList);
    /**ljt 20201027 end*/

    /**
     * 根据用户关注的类型随机查询文章信息
     * @param articleTypeId
     * @param recordSize
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getArticleInfoByUserConcernArticleTypeForRand(List<Integer> articleTypeId, int recordSize);

    /**
     * 生成推送文章
     * @param articleTypeId
     * @param recordSize
     * @return
     */
    String generateUserPushArticleInfo(List<Integer> articleTypeId, int recordSize, PlatformSysInfo platformSysInfoConfig);

    /**
     * 获取待添加redis的平台爬虫文章
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getToBeAddRedisArticleInfoOfBrand();

    /**
     * 获取待移除redis的平台爬虫文章
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getToBeRemoveRedisArticleInfoOfBrand();

    /**
     * 查询待添加至redis的类型文章信息
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getToBeAddToRedisArticleInfoOfType();

    /**
     * 查询需要从redis中移除的类型文章信息
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getToBeRemoveFromRedisArticleInfoOfType();

    /**
     * 查看他人打卡文章
     * @param lookArticleInfo
     * @return
     */
    int lookOtherUserPunchClockArticle(LookArticleInfo lookArticleInfo, PunchClockArticleInfo punchClockArticleInfo, String lookUserNickName);

    /**
     * 临时查询无缩略图的文章
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> tempQueryThumbnailNullInfo();

    /**
     * 获取用户分享的文章数目
     * @param userId
     * @return
     */
    int getUserSharedArticleCount(Integer userId);

    /**
     * 根据文章类型查询文章信息 --  通过文章热度值
     * @param articleTypeId
     * @param articleHotValue
     * @return
     */
    PageInfo<ArticleListShowInfo> getArticleInfoByArticleTypeForHotScore(int pageNum, int pageSize, Integer articleTypeId, Integer articleHotValue,String springProfilesActive);
    void insertArticleInfoByArticleType( Integer articleTypeId,String springProfilesActive);

    /**
     * 根据文章类型查询文章信息 --  通过文章热度值
     * @param articleBrandId
     * @return
     */
    PageInfo<ArticleListShowInfo> getArticleInfoByArticleBrandForHotScore(int pageNum, int pageSize, Integer articleBrandId, Integer articleHotValue,String springProfilesActive);
    void insertArticleInfoByArticleBrand( Integer articleBrandId);

    PageInfo<ArticleListShowInfo> queryArticleInfoByKeyWorksForHotScore(int pageNum, int pageSize, String keyWorks);

    /**
     * 根据文章类型查询指定数目的文章信息 --  通过文章热度值
     * @param articleTypeId
     * @param articleHotValue
     * @return
     */
    List<ArticleListShowInfo> getArticleInfoByArticleTypeForHotScoreBySpecialSize(Integer articleTypeId, Integer articleHotValue, Integer recordSize);

    /**
     * 根据标题查询用户已经添加的微信文章ID
     * @param articleTitle
     * @param userId
     * @return
     */
    ArticleInfo getUserAddedWxArticleInfoByTitle(Integer userId, String articleTitle);

    /**
     * 获取客户页面提示文字
     * @param userId
     * @param totalLookCount
     * @return
     */
    String generateCustomerPagePromptText(Integer userId, int totalLookCount);

    /**yl 20200529
     * 分页查询视频
     * @param
     * @param
     * @param
     * @return
     */
    List<ArticleInfo> selectArticleByVideo(List<Integer> ids, List<Integer> bid,Integer pageNum,Integer pageSize);

    List<ArticleInfo> selectArticleByArticleType(List<Integer> articleTypeId ,Integer pageNum ,Integer pageSize);

    PageInfo selectArticleByArticleTypeAndBrandId(List<Integer> articleTypeId ,List<Integer> userBrandIds,Integer pageNum ,Integer pageSize);

    List<ArticleRespEntity> selectArticleByMaterial(Integer pageNum, Integer pageSize, GetArticleInfoByArticleReqBean articleInfoByArticleReqBean, Integer userId);

    /**
     * 点赞或取消点赞
     * @param userId 用户 ID
     * @param articleId 文章 ID
     * @return 点赞状态值(-1:参数异常, 0-取消点赞 1-已点赞)
     */
    int giveLikeByArticleId(Integer userId, Integer articleId);

    /**
     * 查看用户是否点赞该文章
     * @param userId 用户 ID
     * @param articleId 文章 ID
     * @return 点赞状态值(0-未点赞 1-已点赞)
     */
    int giveLikeStatusByArticleId(Integer userId, Integer articleId);

    List<ArticleRespEntity> getArticle(Integer pageNum, Integer pageSize, GetArticleInfoByArticleReqBean articleInfoByArticleReqBean, Integer userId);

    List<ArticleInfo> getArticleByVideo(Integer pageNum, Integer pageSize, GetArticleInfoByArticleReqBean articleInfoByArticleReqBean, Integer userId);

    List<String> selectMaterialImgByArticleId(Integer articleId);

    boolean isSaveLocally(Integer userId, Integer articleId, String gzhCode);

    void addUserAttentionMaterial(ArticleRespEntity articleRespEntity);

    List<ArticleRespEntity> selectMaterialByUserId(Integer pageNum, Integer pageSize, Integer userId);

    void delMaterialById(ArticleInfo articleInfo);

    int addMaterialVideoByInfo(ArticleInfo ArticleInfo);

    int addMaterialVideoByDouDouInfo(ArticleInfo ArticleInfo);

    int updateMaterialVideoByInfo(ArticleInfo ArticleInfo);

    /**
     * 常见问题 id ，公众号标识，查询 常见问题 多条数据
     *
     * @param pageNum 查询起始位置
     * @param pageSize  查询条数
     * @param articleTypeId 品牌 常见问题id
     * @param gzhCode 公众号标识
     * @return 对象列表
     */
    PageInfo selectManualByLimit(Integer pageNum , Integer pageSize, Integer articleTypeId, String gzhCode);

    /**
     * 根据 品牌id 或 分类id 查询最新文章或视频多条数据
     *
     * @param pageNum 页码
     * @param pageSize 每页数
     * @param type 1-品牌文章 2-分类文章
     * @param articleBrandIdOrTypeId 品牌id 或 分类id
     * @return
     */
    PageInfo<CombinedArticleInfoByArticleBrandAndHotValue> getArticleByBrandIdOrTypeId(Integer pageNum , Integer pageSize, Integer type, Integer articleBrandIdOrTypeId);

    /**
     * 查询指定数目的用户文章
     * @param userId
     * @return
     */
    List<CombinedArticleInfoByArticleBrandAndHotValue> queryUserArticleInfoByUserId(Integer userId, int recordSize);

    List<CombinedArticleInfoByArticleBrand> queryArticleInfoOfBrandOrType(Integer type, Integer articleBrandIdOrTypeId, int recordSize);

    /**
     * 根据品牌随机查询文章信息
     * @param articleBrandId
     * @param recordSize
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getArticleInfoByBrandForRandTop50(Integer articleBrandId, int recordSize);

    /**
     * 根据文章类型随机查询文章信息
     * @param articleTypeId
     * @param recordSize
     * @return
     */
    List<CombinedArticleInfoByArticleBrand> getArticleInfoByArticleTypeForRandTop50(Integer articleTypeId, int recordSize);

    /**
     * 如果该品牌没有文章了，那么就找关联品牌文章，如果没有关联分类文章
     *
     * @param articleBrandId
     * @return
     */
    List<ArticleListShowInfo> getLinkArticle(Integer articleBrandId);

    /**
     * 获取用户的文章列表(用户创建的、用户修改过的)
     * @param userId
     * @return
     */
    List<ArticleInfo> getUserCreateOrModifyArticle(Integer userId, Integer type);

    /**
     * 获取用户文章底部开关设置信息
     * @param userId 用户 ID
     * @param articleId 文章 ID
     * @return 文章底部开关设置信息
     */
    UserArticleTailSetInfo getArticleTailSetInfo(Integer userId, Integer articleId);

    /**
     * 保存用户文章底部按钮设置
     * @param articleTailSetInfo 实体
     * @return
     */
    int addArticleTailSetInfo(ArticleTailSetInfo articleTailSetInfo);

    /**
     * 修改用户文章底部开关设置信息
     * @param articleTailSetInfo 实体类
     * @return 影响行数
     */
    int updateArticleTailSetInfo(ArticleTailSetInfo articleTailSetInfo);

    /**
     * 获取本周的用户发布数量列表
     * @param userId 用户 ID
     * @return 本周的用户发布数量列表
     */
    List<CombinedCustomerInfo> getCurrentWeekPublishData(Integer userId);

    /**
     * 获取本月的用户发布数量列表
     * @param userId 用户 ID
     * @return 本月的用户发布数量列表
     */
    List<CombinedCustomerInfo> getCurrentMonthPublishData(Integer userId);

    /**
     * 获取本季的用户发布数量列表
     * @param userId 用户 ID
     * @return 本季的用户发布数量列表
     */
    List<CombinedCustomerYearInfo> getCurrentSeasonPublishData(Integer userId);

    /**
     * 获取年度的用户发布数量列表
     * @param userId 用户 ID
     * @return 年度的用户发布数量列表
     */
    List<CombinedCustomerYearInfo> getCurrentYearPublishData(Integer userId);

    /**
     * 获取文章的点赞数
     * @param articleId
     * @return
     */
    int getArticleLikeCount(Integer articleId);
}
